---
title: 特性总览
description: 核心特性、数据存储、web技术、框架整合和测试
---
## 核心特性(Core)
* IOC容器(IOC Container)
* Spring事件(Events)：Spring 事件是基于 Java 的标准事件来进行扩展的。
* 资源管理(Resources)：继承于 Java 的一些资源管理，并且它的某些 API 借鉴了 Java 核心的底层 API 的一个实现。
* 国际化(I18N)：Java 默认就支持国际化，Spring 的国际化也是基于 Java API 进行实践的。
* 校验(Validation)： Spring 提供了一套校验的 API，可以对 JavaBean 进行校验。
* 数据绑定(Data Binding)：Spring 提供了一套数据绑定的 API，可以对 JavaBean 进行数据绑定。其实就是外面的一些属性和 Java 的POJO 的 Setter 、Getter 来进行一个数据上的转化和绑定。
* 类型转换(Type Conversion)：类型转换是 Spring 用来进行数据绑定的一个重要组成部分，它可以将一个字符串转换成一个 JavaBean 的属性类型。
* Spring表达式语言(Spring Expression Language)
* 面向切面编程(AOP)：Spring 的 AOP 是基于动态代理的，它可以对一些方法进行拦截，然后在方法的前后进行一些操作。
## 数据存储(Data Access)
* JDBC
* 事务(Transaction)：Spring 的事务是基于 JDBC 的事务来实现的，它可以对 JDBC 的事务进行一些扩展。
* DAO支持：Spring 提供了一套 DAO 的支持，可以对 DAO 层进行封装，使得 DAO 层的代码更加简洁。
* ORM集成(O/R)：Spring 提供了对 ORM 框架的支持，可以对 ORM 框架进行整合。
* XML 编列(XML Marshalling): XML 和 Java 序列化进行对比的话，Java 的序列化就相当于这里的编列，反序列化就是反编列。
## Web 技术(Web)
### Servlet 技术栈
* Spring MVC
* WebSocket

### Reactive 技术栈
* Spring WebFlux
* WebClient：对标 RestTemplate(同步的HTTP的执行客户端)，用于调用 REST 接口；WebClient 把同步执行变成了异步执行，可以提高系统的吞吐量。
* WebSocket
## 技术整合(Integration)
* 远程调用(Remoting)：Spring 提供了对远程调用的支持，可以对 RMI、JAX-WS、HTTP、Hessian(Dubbo)、Burlap 等协议进行支持。通常来说远程调用采用的是同步的模式。
* Java 消息服务(JMS)：Spring 提供了对 JMS 的支持，可以对 JMS 进行封装。这部分内容是 Java 异步的调用。
* Java 连接架构(JCA)：属于 Java EE的架构，这个架构主要是统一一些 Java 的资源连接，比如 JDBC 这样的连接。（这个点基本没人用）
* Java 管理扩展(JMX)：关注于 Java 的一些运行时的状态，比如 Java 的内存、线程等等。它包括了四大模型，标准 Bean、动态 Bean、动态 Bean 又分为三种 标准动态Bean、模型Bean和开放Bean。通过注解 @ManagedResource 来进行标注。
* Java 邮件客户端(Mail)
* 本地任务(Task)：利用 Java 的多线程技术来进行实现。
* 本地调度(Scheduling)：利用 Java 的多线程技术来进行实现。
* 缓存抽象(Caching)：不但简化了缓存里面的操作，还可以对缓存进行一些统一的管理。（缓存就像数据库一样，最常见的操作就是 CRUD，Spring也通过注解的方式来抽象掉它里面的基本的一些含义，帮助实现缓存透明化。在调用普通方法的时候，也能支持一些缓存的应用）
* 测试(Test)：Spring 提供了对测试的支持，可以对测试进行封装。

## 测试(Test)
* 模拟对象(Mock Objects):MockHttp 接口，可以模拟 HTTP 请求，帮助我们完成单元测试
* TestContext框架 (Spring TestContext Framework) ：TestContext 框架其实是 Spring 对集成测试的整合，它可以对 Spring 的上下文进行管理，比如说 Spring 的 IOC 容器、Spring 的事务等等。
* Spring MVC 测试：Spring MVC 测试是对 Spring MVC 的一个测试，它可以对 Spring MVC 的控制器进行测试。
* WebTestClient (WebTestClient)：WebTestClient 是对 Spring WebFlux 的一个测试，它可以对 Spring WebFlux 的控制器进行测试。

